package main

import "fmt"

func getSum() func(int) int {
	var sum int = 0
	return func(num int) int {
		sum = sum + num
		return sum
	}
}

func main() {
	//第五章：go语言函数
	f := getSum()
	fmt.Println(f(1))
	fmt.Println(f(2))
	//Q:为什么第二个结果是3
	//A:因为f是一个闭包，f内部的sum变量是持久化的

	//Q:如何理解闭包
	//A:闭包是一个函数和与其相关的引用环

	//Q:闭包的好处
	//A:可以保留函数的状态
	//A:可以避免使用全局变量
	//A:可以避免使用传递参数

	fmt.Println("=====================================")
	fmt.Println(getSum01(1))
	fmt.Println(getSum01(2))
}

func getSum01(num int) int {
	var sum int = 0
	sum = sum + num
	return sum
}
